package com.zzt.zt_cropimageview;

import java.math.BigDecimal;

/**
 * Created by fangzhu on 2015/2/6.
 */
public class NumberUtil {

    /**
     * 解决double 计算的小数点错误
     */
    public static BigDecimal getBigDecimal(double num) {
        return new BigDecimal(Double.toString(num));
    }

    public static BigDecimal getBigDecimal(int num) {
        return new BigDecimal(Integer.toString(num));
    }

    /**
     * 加法
     */
    public static double add(double num1, double num2) {
        BigDecimal big1 = getBigDecimal(num1);
        BigDecimal big2 = getBigDecimal(num2);
        return big1.add(big2).doubleValue();
    }

    public static double add(int num1, int num2) {
        BigDecimal big1 = getBigDecimal(num1);
        BigDecimal big2 = getBigDecimal(num2);
        return big1.add(big2).doubleValue();
    }

    public static String addString(String num1, String num2) {
        BigDecimal big1 = new BigDecimal(num1);
        BigDecimal big2 = new BigDecimal(num2);
        return big1.add(big2).toEngineeringString();
    }

    /**
     * 减法
     */
    public static double subtract(double num1, double num2) {
        BigDecimal big1 = getBigDecimal(num1);
        BigDecimal big2 = getBigDecimal(num2);
        return big1.subtract(big2).doubleValue();
    }

    public static String subtractString(String num1, String num2) {
        BigDecimal big1 = new BigDecimal(num1);
        BigDecimal big2 = new BigDecimal(num2);
        return big1.subtract(big2).toEngineeringString();
    }

    /**
     * 乘法
     */
    public static double multiply(double num1, double num2) {
        BigDecimal big1 = getBigDecimal(num1);
        BigDecimal big2 = getBigDecimal(num2);
        return big1.multiply(big2).doubleValue();
    }

    public static String multiplyString(String num1, String num2) {
        BigDecimal big1 = new BigDecimal(num1);
        BigDecimal big2 = new BigDecimal(num2);
        return big1.multiply(big2).toEngineeringString();
    }

    /**
     * 除法
     */
    public static double divide(double num1, double num2) {
        if (num2 == 0)
            return Double.MAX_VALUE;
        BigDecimal big1 = getBigDecimal(num1);
        BigDecimal big2 = getBigDecimal(num2);
        return big1.divide(big2, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    public static float divide(int num1, int num2) {
        if (num2 == 0) {
            return 0F;
        }
        BigDecimal big1 = getBigDecimal(num1);
        BigDecimal big2 = getBigDecimal(num2);
        return big1.divide(big2, 5, BigDecimal.ROUND_HALF_UP).floatValue();
    }

    public static float divide(float num1, float num2) {
        if (num2 == 0) {
            return 0F;
        }
        BigDecimal big1 = getBigDecimal(num1);
        BigDecimal big2 = getBigDecimal(num2);
        return big1.divide(big2, 5, BigDecimal.ROUND_HALF_UP).floatValue();
    }

}
